package kusterordonio.dominio;

import java.io.Serializable;
import java.util.*;

public class Carne implements Serializable{

    private Embarazo embarazo;
    private RecienNacido recienNacido;
    private Vacunas vacunas;
    private ArrayList<ControlSaludHastaDosAnios> controlDeSaludHastaDos;
    private ArrayList<ControlSaludDesdeDosAnios> controlDeSaludDesdeDos;
    private ArrayList<Ecografia> ecografias;
    private ArrayList<Interconsulta> interconsultas;
    private ArrayList<HospEnf> hospEnf;
    private boolean [] desarrollo;
    private SaludOcular saludOcular;
    private String [] saludBucal;
    private ArrayList<AptitudFisica> aptitudFisica;
    private ArrayList<Nota> notas;
    private String [] telefImportantes;
    
    public Carne() {
        embarazo = new Embarazo();
        vacunas= new Vacunas();
        recienNacido = new RecienNacido();
        saludOcular = new SaludOcular();
        controlDeSaludHastaDos = new ArrayList<ControlSaludHastaDosAnios>();
        controlDeSaludDesdeDos = new ArrayList<ControlSaludDesdeDosAnios>();
        ecografias = new ArrayList<Ecografia>();
        interconsultas = new ArrayList<Interconsulta>();
        hospEnf = new ArrayList<HospEnf>();
        aptitudFisica = new ArrayList<AptitudFisica>();
        notas = new ArrayList<Nota>();
        telefImportantes = new String[5];
        for(int i=0;i<telefImportantes.length;i++)
            telefImportantes[i]="";
        desarrollo = new boolean[50];
        saludBucal = new String[9];
        for(int i=0;i<saludBucal.length;i++)
            saludBucal[i]="";
    }
    
    public Carne(Embarazo unEmbarazo, Vacunas unasVacunas, RecienNacido unRecienNacido, SaludOcular unaSaludOcular) {
        embarazo= unEmbarazo;
        vacunas= unasVacunas;
        recienNacido= unRecienNacido;
        saludOcular= unaSaludOcular;
        controlDeSaludHastaDos = new ArrayList<ControlSaludHastaDosAnios>();
        controlDeSaludDesdeDos = new ArrayList<ControlSaludDesdeDosAnios>();
        ecografias = new ArrayList<Ecografia>();
        interconsultas = new ArrayList<Interconsulta>();
        hospEnf = new ArrayList<HospEnf>();
        aptitudFisica = new ArrayList<AptitudFisica>();
        notas = new ArrayList<Nota>();
        telefImportantes = new String[5];
        for(int i=0;i<telefImportantes.length;i++)
            telefImportantes[i]="";
        desarrollo = new boolean[50];
        saludBucal = new String[9];
        for(int i=0;i<saludBucal.length;i++)
            saludBucal[i]="";
    }

    public ArrayList<AptitudFisica> getAptitudFisica() {
        return aptitudFisica;
    }
    
     public ArrayList<Nota> getNotas() {
        return notas;
    }

   public ArrayList<Ecografia> getEcografias() {
        return ecografias;
    }

    public ArrayList<HospEnf> getHospEnf() {
        return hospEnf;
    }

    public ArrayList<Interconsulta> getInterconsultas() {
        return interconsultas;
    }

    public boolean[] getDesarrollo() {
        return desarrollo;
    }

    public String[] getTelefImportantes() {
        return telefImportantes;
    }

    public Embarazo getEmbarazo() {
        return embarazo;
    }

    public void setEmbarazo(Embarazo embarazo) {
        this.embarazo = embarazo;
    }

    public RecienNacido getRecienNacido() {
        return recienNacido;
    }

    public void setRecienNacido(RecienNacido recienNacido) {
        this.recienNacido = recienNacido;
    }

    public String[] getSaludBucal() {
        return saludBucal;
    }


    public SaludOcular getSaludOcular() {
        return saludOcular;
    }

    public void setSaludOcular(SaludOcular saludOcular) {
        this.saludOcular = saludOcular;
    }

    public Vacunas getVacunas() {
        return vacunas;
    }

    public void setVacunas(Vacunas vacunas) {
        this.vacunas = vacunas;
    }
    
    //Agrega una nota a la lista de notas
    public void agregarNota(Nota nota){
        this.getNotas().add(nota);
        Collections.sort(this.getNotas(), new OrdenaNotaPorFecha());
    }
    
    //Devuelve true si la lista es vacia
    public boolean esVaciaNotas(){
         return this.getNotas().isEmpty();
    }
    
    public void cargarTelefonos(String primero, String segundo, String tercero, String cuarto, String quinto){
        this.telefImportantes[0]=primero;
        this.telefImportantes[1]=segundo;
        this.telefImportantes[2]=tercero;
        this.telefImportantes[3]=cuarto;
        this.telefImportantes[4]=quinto;
    }
    
    //Devuelve true si la lista es vacia
    public boolean esVaciaEcoCadera(){
         return this.getEcografias().isEmpty();
    }
    
    //Agrega una ecografía a la lista de ecografïas
    public void agregarEcoCadera(Ecografia unaEcoCadera){
        this.getEcografias().add(unaEcoCadera);
        Collections.sort(this.getEcografias(), new OrdenaEcografiaPorFecha());
    }
    
    //Devuelve true si la lista es vacia
    public boolean esVaciaControlSaludHastaDos(){
         return this.getControlDeSaludHastaDos().isEmpty();
    }
    //Agrega un control de salud a la lista de controles
    public void agregarControlSaludHastaDos(ControlSaludHastaDosAnios unControl){
        this.getControlDeSaludHastaDos().add(unControl);
        Collections.sort(this.getControlDeSaludHastaDos(),new OrdenaControlSaludPorFecha());
    }
    
    //Devuelve true si la lista es vacia
    public boolean esVaciaControlSaludDesdeDos(){
         return this.getControlDeSaludDesdeDos().isEmpty();
    }

    public ArrayList<ControlSaludHastaDosAnios> getControlDeSaludHastaDos() {
        return controlDeSaludHastaDos;
    }

    public ArrayList<ControlSaludDesdeDosAnios> getControlDeSaludDesdeDos() {
        return controlDeSaludDesdeDos;
    }

    //Agrega un control de salud a la lista de controles
    public void agregarControlSaludDesdeDos(ControlSaludDesdeDosAnios unControl){
        this.getControlDeSaludDesdeDos().add(unControl);
        Collections.sort(this.getControlDeSaludDesdeDos(),new OrdenaControlSaludPorFecha());
    }
    
    //Devuelve true si la lista es vacia
    public boolean esVaciaAptitudFisica(){
         return this.getAptitudFisica().isEmpty();
    }
    //Agrega una aptitudFisica a la lista de aptitudes
    public void agregarAptitud(AptitudFisica unaAptitud){
        this.getAptitudFisica().add(unaAptitud);
        Collections.sort(this.getAptitudFisica(), new OrdenaAptitudFisicaPorFecha());
    }
    //Devuelve true si la lista es vacia
    public boolean esVaciaInterconsultas(){
         return this.getInterconsultas().isEmpty();
    }
    //Agrega una interConsulta a la lista de interconsultas
    public void agregarInterconsulta(Interconsulta unaInterconsulta){
        this.getInterconsultas().add(unaInterconsulta);
        Collections.sort(this.getInterconsultas(), new OrdenaInterconsultaPorFecha());
    }
    //Devuelve true si la lista es vacia
    public boolean esVaciaHospEnf(){
         return this.getHospEnf().isEmpty();
    }
    //Agrega una hospitalizacion a la lista de hospitalizaciones
    public void agregarHospEnf(HospEnf unaHospEnf){
        this.getHospEnf().add(unaHospEnf);
        Collections.sort(this.getHospEnf(), new OrdenaHospitalizacionPorFecha());
    }
    
    //Carga los datos de los controles de salud del menor de 2 años en un array de doubles
    public Double[] datosPesoHastaDos(){
        int tamanio= this.getControlDeSaludHastaDos().size()*2;
        Double[] datos = new Double[tamanio];
        for(int i = 0; i< this.getControlDeSaludHastaDos().size(); i++){
            datos[i*2]= (double)(this.getControlDeSaludHastaDos().get(i).getEdad()/30);
            datos[(i*2)+1]= ((double)(this.getControlDeSaludHastaDos().get(i).getPeso()/100))/10; 
        }
        return datos;
    }
    
    //Carga los datos de los controles de salud del mayor de 2 años en un array de doubles
    public Double[] datosPesoEstaturaDeDosACinco(){
        int tamanio = 0;
        for(int i = 0; i< this.getControlDeSaludDesdeDos().size(); i++){
            if(this.getControlDeSaludDesdeDos().get(i).getEdad()< 1825){
                tamanio++;
            }
        }
        Double[] datos = new Double[tamanio*2];
        int lugar = 0;
        for(int i = 0; i< this.getControlDeSaludDesdeDos().size(); i++){
            if(this.getControlDeSaludDesdeDos().get(i).getEdad()< 1825){
                datos[lugar]= (double)this.getControlDeSaludDesdeDos().get(i).getTalla();
                datos[lugar+1]= ((double)(this.getControlDeSaludDesdeDos().get(i).getPeso()/100))/10; 
                lugar = lugar + 2;
            }
        }
        return datos;
    }
    
    //Carga los datos de los controles de salud del menor de 2 años en un array de doubles
    public Double[] datosLongitudHastaDos(){
        int tamanio= this.getControlDeSaludHastaDos().size()*2;
        Double[] datos = new Double[tamanio];
        for(int i = 0; i< this.getControlDeSaludHastaDos().size(); i++){
            datos[i*2]= (double)(this.getControlDeSaludHastaDos().get(i).getEdad()/30);
            datos[(i*2)+1]= (double)this.getControlDeSaludHastaDos().get(i).getTalla(); 
        }
        return datos;
    }
    
    //Carga los datos de los controles de salud del mayor de 2 años en un array de doubles
    public Double[] datosEstaturaDeDosACinco(){
        int tamanio = 0;
        for(int i = 0; i< this.getControlDeSaludDesdeDos().size(); i++){
            if(this.getControlDeSaludDesdeDos().get(i).getEdad()< 1825){
                tamanio++;
            }
        }
        Double[] datos = new Double[tamanio*2];
        int lugar = 0;
        for(int i = 0; i< this.getControlDeSaludDesdeDos().size(); i++){
            if(this.getControlDeSaludDesdeDos().get(i).getEdad()< 1825){
                datos[lugar]= (double)(this.getControlDeSaludDesdeDos().get(i).getEdad()/30);
                datos[lugar+1]= (double)this.getControlDeSaludDesdeDos().get(i).getTalla(); 
                lugar = lugar + 2;
            }
        }
        return datos;
    }  
    
    //Carga los datos de los controles de salud del mayor de 2 años en un array de doubles
    public Double[] datosEstaturaDesdeCinco(){
        int tamanio = 0;
        for(int i = 0; i< this.getControlDeSaludDesdeDos().size(); i++){
            if(this.getControlDeSaludDesdeDos().get(i).getEdad()>= 1825){
                tamanio++;
            }
        }
        Double[] datos = new Double[tamanio*2];
        int lugar = 0;
        for(int i = 0; i< this.getControlDeSaludDesdeDos().size(); i++){
            if(this.getControlDeSaludDesdeDos().get(i).getEdad()>= 1825){
                datos[lugar]= (double)(this.getControlDeSaludDesdeDos().get(i).getEdad()/30);
                datos[lugar+1]= (double)this.getControlDeSaludDesdeDos().get(i).getTalla(); 
                lugar = lugar + 2;
            }
        }
        return datos;
    }
    
    //Carga los datos de los controles de salud del menor de 2 años en un array de doubles
    public Double[] datosPC(){
        int tamanio= this.getControlDeSaludHastaDos().size()*2;
        Double[] datos = new Double[tamanio];
        for(int i = 0; i< this.getControlDeSaludHastaDos().size(); i++){
            datos[i*2]= (double)(this.getControlDeSaludHastaDos().get(i).getEdad()/30);
            datos[(i*2)+1]= (double)this.getControlDeSaludHastaDos().get(i).getPerimetroCraneal(); 
        }
        return datos;
    }
    
    //Carga los datos de los controles de salud del mayor de 5 años en un array de doubles
    public Double[] datosIMC(){
        int tamanio = 0;
        for(int i = 0; i< this.getControlDeSaludDesdeDos().size(); i++){
            if(this.getControlDeSaludDesdeDos().get(i).getEdad()>= 1825){
                tamanio++;
            }
        }
        Double[] datos = new Double[tamanio*2];
        int lugar = 0;
        for(int i = 0; i< this.getControlDeSaludDesdeDos().size(); i++){
            if(this.getControlDeSaludDesdeDos().get(i).getEdad()>= 1825){
                datos[lugar]= (double)(this.getControlDeSaludDesdeDos().get(i).getEdad()/30);
                datos[lugar+1]= this.getControlDeSaludDesdeDos().get(i).getImc(); 
                lugar = lugar + 2;
            }
        }
        return datos;
    }

    public boolean esVacioSaludBucal(){
        for(int i = 0; i<saludBucal.length; i++){
            if(!saludBucal[i].equals(""))
                return false;
        }
        return true;
    }
}
